// 文件工具类
const fs = require("fs");
const formidable = require("formidable");
const tools = require("./tool");

const path = require('path');
// 递归创建目录 同步方法
let mkdirsSync = (dirname) => {
    if (fs.existsSync(dirname)) {
        return true;
    } else {
        if (mkdirsSync(path.dirname(dirname))) {
            fs.mkdirSync(dirname);
            return true;
        }
    }
};

module.exports = {
    /**
     * 上传文件
     * @param req
     * @param options 配置formidable和文件路径的相关参数
     *  eg:{
     *      fileDir:"public/file", 文件存放路径 相对于被引用的位置的相对位置，也可以使用绝对路径, 要求public目录要手动创建好
     *      maxFileSize :2 * 1024 * 1024， 文件最大的大小(指的是一次上传总的、多个的文件的大小) 单位B
     *  }
     */
    upload: (req, options) => {
        if (!options) {
            options = {};
        }
        // 文件存放目录  该目录是以被引用的位置作为相对位置。
        var cacheFolder = options.fileDir || 'public/file';
        if (!fs.existsSync(cacheFolder)) {
            fs.mkdirSync(cacheFolder);
        }
        let form = new formidable.IncomingForm(); //创建上传表单
        form.encoding = 'utf-8'; //设置编辑
        form.uploadDir = cacheFolder; //设置上传目录
        form.keepExtensions = true; //保留后缀
        form.maxFileSize = options.maxFileSize || 200 * 1024 * 1024; //文件大小
        form.type = true;
        return new Promise(function(resolve, reject){
            form.parse(req, function(err, fields, files) {
                console.log(`接受到的参数${fields}`)
                if (err) {
                    // 遗留问题：上传文件异常，不会马上返回，会卡在这边，直到超时
                    console.log(`文件上传异常：${err.message}`);
                    reject({error: err.message});
                } else {
                    // 重命名
                    let avatarName = options.fileName;
                    if (!avatarName) {
                        //后缀名
                        let extName = '';
                        let fileOriginName = files.file.name;
                        // 判断是否有后缀名
                        if (fileOriginName.indexOf('.') > -1) {
                            let nameArray = fileOriginName.split(".");
                            extName = '.' + nameArray[nameArray.length - 1];
                        }
                        avatarName = tools.newId() + extName;
                    }

                    let newPath = form.uploadDir + '/' + avatarName;
                    fs.renameSync(files.file.path, newPath); //重命名
                    console.log(`文件上传成功：${avatarName}`);
                    resolve(avatarName);
                }
            });
        });
    }
}

//文件上传和图片查看
//